home *** CD-ROM | disk | FTP | other *** search
/ PC Player 2004 May / pc player 2004-05.iso / Demos / FarCry / Data1.cab / _CDD591958E9A4A8D910885A65E1FDA48 < prev    next >
Encoding:
Text File  |  2004-01-06  |  5.4 KB  |  174 lines

  1.       #include "../CGVPMacro.csi"
  2.  
  3.       AutoEnumTC
  4.  
  5.       MainInput
  6.       {
  7.         uniform sampler2D baseMap : register(sn),
  8. #if %LM
  9.         uniform sampler2D lightMap : register(sn),
  10. #elif %DOT3LM
  11.   #if %BUMP_MAP
  12.         uniform sampler2D bumpMap : register(sn),
  13.   #endif        
  14.         uniform sampler2D lightMap : register(sn),
  15.         uniform sampler2D lightDirMap : register(sn),
  16. #endif        
  17. #if %ENVCMAMB
  18.         uniform samplerCUBE envMap : register(sn),
  19. #elif %ENVCMSPEC
  20.   #if !%DOT3LM && %BUMP_MAP
  21.         uniform sampler2D bumpMap : register(sn),
  22.   #endif
  23.         uniform samplerCUBE envMap : register(sn),
  24.   #if %GLOSS_MAP
  25.         uniform sampler2D glossMap : register(sn),
  26.   #endif        
  27. #endif
  28.         uniform float4 Ambient,
  29. #if %ENVCMAMB
  30.         uniform float4 Reflect,
  31. #elif %ENVCMSPEC
  32.         uniform float4 EnvMapParams,
  33.         uniform float4 FresnelParams,
  34. #endif
  35.       }
  36.       
  37.       DeclarationsScript
  38.       {
  39.         // define outputs from vertex shader
  40.         struct vertout
  41.         {
  42.           float4 HPosition  : POSITION;
  43.           float4 baseTC     : TEXCOORDN;
  44. #if %LM
  45.           float4 lmTC       : TEXCOORDN;
  46. #elif %DOT3LM
  47.   #if %BUMP_MAP
  48.           float4 bumpTC     : TEXCOORDN;
  49.   #endif
  50.           float4 lmTC       : TEXCOORDN;
  51.           float4 lmdirTC    : TEXCOORDN;
  52. #endif
  53. #if %ENVLIGHT
  54.           float4 Color      : COLOR0;
  55. #elif %ENVCMAMB
  56.           float4 envTC      : TEXCOORDN;
  57. #elif %ENVCMSPEC
  58.   #if !%DOT3LM && %BUMP_MAP
  59.           float4 bumpTC     : TEXCOORDN;
  60.   #endif
  61.           float4 viewVec    : TEXCOORDN;
  62.           float4 tangVec    : TEXCOORDN;
  63.           float4 binormVec  : TEXCOORDN;
  64.           float4 normVec    : TEXCOORDN;
  65. #endif          
  66.         };
  67.  
  68.         FOUT
  69.       }
  70.       CoreScript
  71.       {
  72.         // load the decal
  73.         half4 decalColor = tex2D(baseMap, IN.baseTC.xy);
  74.  
  75.         // Compute diffuse contribution
  76. #if %LM
  77.         // load the lm
  78.         half4 lmColor = tex2D(lightMap, IN.lmTC.xy);
  79.         half3 dif = (decalColor.xyz * lmColor.xyz) * 4;
  80. #elif %DOT3LM
  81.   #if %BUMP_MAP
  82.         // load the bump normal
  83.         float4 bumpNormal = 2*(tex2D(bumpMap, IN.bumpTC.xy)-0.5);
  84.   #else        
  85.         float4 bumpNormal = float4(0,0,1,1);
  86.   #endif
  87.         // load the lm
  88.         half4 lmColor = tex2D(lightMap, IN.lmTC.xy);
  89.         // load the lm dir
  90.         float4 lmDir = 2*(tex2D(lightDirMap, IN.lmdirTC.xy)-0.5);
  91. #if %BUMP_NORMALIZE && %BUMP_MAP
  92.         // normalize post-filtered bump normals
  93.         bumpNormal.xyz = normalize(bumpNormal.xyz);
  94. #endif
  95.         float NdotL = saturate(dot(lmDir.xyz, bumpNormal.xyz));
  96.         half  lmIntens = NdotL * lmColor.a + (1-lmColor.a);
  97.         half3 dif = (decalColor.xyz * lmColor.xyz * lmIntens) * 4;
  98. #else
  99.         half3 dif = float3(0,0,0);
  100. #endif        
  101.  
  102.         // Compute ambient contribution
  103. #if %ENVLIGHT
  104.         half3 amb = decalColor.xyz * IN.Color.xyz;
  105. #elif %ENVCMAMB
  106.         // load the environment map
  107.         half4 envColor = texCUBE(envMap, IN.envTC.xyz);
  108.         half3 amb = lerp(decalColor.xyz*Ambient.xyz, envColor.xyz, Reflect.a);
  109. #elif %ENVCMSPEC
  110.   #if !%DOT3LM
  111.     #if %BUMP_MAP
  112.         // load the bump normal
  113.         float4 bumpNormal = 2*(tex2D(bumpMap, IN.bumpTC.xy)-0.5);
  114.       #if %BUMP_NORMALIZE
  115.         // normalize post-filtered bump normals
  116.         bumpNormal.xyz = normalize(bumpNormal.xyz);
  117.       #endif
  118.     #else
  119.         float4 bumpNormal = float4(0,0,1,1);
  120.     #endif
  121.   #endif
  122.         half fEnvmapContrast = EnvMapParams.x;
  123.         half fEnvmapSaturation = EnvMapParams.y;
  124.         half fEnvmapAmount = EnvMapParams.z;
  125.  
  126.         float fFresnelScale = FresnelParams.x;
  127.         float fFresnelBias = FresnelParams.y;
  128.         float fFresnelPow = FresnelParams.z;
  129.  
  130.         // Calc Reflection Vector
  131.         float3x3 worldTangentSpace;
  132.         worldTangentSpace[0] = IN.tangVec.xyz;
  133.         worldTangentSpace[1] = IN.binormVec.xyz;
  134.         worldTangentSpace[2] = IN.normVec.xyz;
  135.  
  136.         float3 viewVec = normalize(IN.viewVec.xyz);
  137.         float NdotE = dot(bumpNormal.xyz, viewVec);
  138.         float3 reflectVect = (2.0*NdotE*bumpNormal.xyz)-(dot(bumpNormal.xyz, bumpNormal.xyz)*viewVec);
  139.         float3 worldReflectVec = mul(reflectVect, worldTangentSpace);
  140.  
  141.         // Calc Fresnel factor
  142.         half fresnel = fFresnelBias + (pow((1-NdotE), fFresnelPow) * fFresnelScale);
  143.  
  144.         // Calc environment
  145.         half3 env = texCUBE(envMap, worldReflectVec).xyz * fEnvmapAmount;
  146.         half3 envSquared = env * env;
  147.         env = lerp(env, envSquared, fEnvmapContrast);
  148.         half3 greyScale = dot(env, half3(0.33, 0.59, 0.11));
  149.         env = lerp(greyScale, env, fEnvmapSaturation) * fresnel;
  150.   #if GLOSS_MAP
  151.         // load the gloss
  152.         half4 glossColor = tex2D(glossMap, IN.baseTC.zw);
  153.         env *= glossColor.xyz;
  154.   #endif        
  155.         half3 amb = decalColor.xyz * Ambient.xyz + env;
  156. #else
  157.         half3 amb = decalColor.xyz * Ambient.xyz;
  158.   #if %ALPHAGLOW
  159.         amb += decalColor.w * decalColor.xyz;
  160.   #endif
  161. #endif
  162.  
  163.         // finally add them all together
  164.         OUT.Color.xyz = amb + dif;
  165. #if %ALPHAGLOW && %DOT3LM
  166. // Fake (for compatibility with old system)
  167. // Should be removed        
  168.         OUT.Color.w = decalColor.w * Ambient.w;        
  169. #elif !%ALPHAGLOW && %DIFFUSEALPHA
  170.         OUT.Color.w = decalColor.w * Ambient.w;
  171. #else
  172.         OUT.Color.w = Ambient.w;
  173. #endif        
  174.       }